//Fang Linedef Execute (Inspired by Sonic Classic 2) By Sonic1983
freeslot("MT_FANG_LINEEXEC", "MT_FANG_TARGET")

addHook("MobjSpawn", function(mo)
local target = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_FANG_TARGET)
mo.tracer = target
target.tracer = mo
end, MT_FANG_LINEEXEC)

addHook("MobjThinker", function(mo)
	if mo
	and mo.valid
	and mo.health
	and mo.type == MT_FANG_LINEEXEC
		if mo.tag_activator == nil
			if mo.spawnpoint
				if mo.spawnpoint.angle
				mo.tag_activator = mo.spawnpoint.angle
				else
				mo.tag_activator = 1
				end
			end
		end
		if mo.tag_lever == nil
		mo.tag_lever = false
		end
		if mo.fang == nil
		mo.fang = 0
		end
		if mo.tag_lever == true
		P_LinedefExecute(mo.tag_activator, mo.fang)
		mo.tag_lever = false
		mo.fang = 0
		end
		if mo.tracer
		and mo.tracer.valid
			if not (mo.eflags & MFE_VERTICALFLIP)
			P_TeleportMove(mo.tracer, mo.x, mo.y, mo.z+64*FRACUNIT)
			else
			P_TeleportMove(mo.tracer, mo.x, mo.y, mo.z-64*FRACUNIT)
			mo.tracer.flags2 = $1|MF2_OBJECTFLIP
			mo.tracer.eflags = $1|MFE_VERTICALFLIP
			end
		end
	end
end, MT_FANG_LINEEXEC)

addHook("MobjThinker", function(mo)
	if mo
	and mo.valid
	and mo.type == MT_FANG_TARGET
		if mo.health
			if mo.shooted == nil
			mo.shooted = false
			end
			if mo.cooldown == nil
			mo.cooldown = 0
			end
			if mo.shooted
			mo.angle = $1 + ANG2+(mo.cooldown)*ANG1
			P_SpawnGhostMobj(mo)
			//mo.color = SKINCOLOR_CRIMSON
			//mo.colorized = true
			mo.state = S_FANG_TARGET_ACTIVATE
			mo.flags2 = $1 & ~MF2_INVERTAIMABLE
			else
			mo.angle = $1 + ANG2
			//mo.color = SKINCOLOR_PURPLE
			//mo.colorized = false
			mo.state = S_FANG_TARGET
			mo.flags2 = $1|MF2_INVERTAIMABLE
			end
			if mo.cooldown > 0
			mo.cooldown = $1 - 1
			elseif mo.cooldown <= 0
				if mo.shooted
				mo.shooted = false
				end
			end
		else
		mo.health = 1
		mo.flags = MF_SHOOTABLE|MF_NOGRAVITY
		end
	end
end, MT_FANG_TARGET)

addHook("MobjDeath", function(mo, inf, source)
	if mo
	and mo.valid
	and mo.type == MT_FANG_TARGET
	and mo.cooldown <= 0
		if inf
		and inf.valid
		and inf.type == MT_CORK //Fang Projectile
			if source
			and source.player
			and source.valid
			and source.skin == "fang" //Fang
				if mo.tracer
				and mo.tracer.valid
				mo.tracer.tag_lever = true
				mo.tracer.fang = source
				end
			mo.cooldown = 2*TICRATE
			mo.shooted = true
			S_StartSound(mo, mo.info.painsound)
			end
		end
	end
return true
end, MT_FANG_TARGET)